bool hasAllCodes(char* s, int k) {
    bool hash[1 << k];//哈希表，，遍历1 ~ （2 ^ 20 - 1）的数
    long sum = 0;
    memset(hash, 0, sizeof(hash));
    int len = strlen(s);
    if(len < k * k + k - 1)//待定系数法可求
        return false;
    for(int i = 0; s[i]; i++){
        sum = (sum << 1) + (s[i] == '1'? 1 : 0);
        if(i < k - 1)
            continue;
        hash[sum] = 1;
        sum = s[i - k + 1] == '1'? (sum - (1 << (k - 1))) : sum;
    }
    for(int i = 0; i < (1 << k); i++){
        if(hash[i] == 0)
            return false;
    }
    return true;
}

/*给你一个二进制字符串 s 和一个整数 k 。如果所有长度为 k 的二进制字符串都是 s 的子串，请返回 true ，否则请返回 false 。*/